Политика безопасности
определяется с помощью разрешений.
Разрешения — это объекты, используемые для
описания прав и полномочий сборок на доступ
к другим объектам или на выполнение
некоторых действий. Сборки могут
запрашивать определенные разрешения.
Именно политикой безопасности
определяется, какие именно разрешения
будут предоставлены сборке.
Вот, например, некоторые из тех
классов, которые предоставляют разрешения:
Все классы разрешений являются
производными от базового класса
CodeAccess-Permission, поэтому они ведут себя
одинаково.
Запрос на некоторые разрешения
можно формировать с помощью значений
параметров сборки. Общеязыковая среда
выполнения CLR использует метаданные для
определения того, какие именно разрешения
запрашиваются. Затем, используя личность
кода и уровень доверия, общеязыковая среда
выполнения CLR на основе политики
безопасности решит, можно ли предоставить
эти разрешения.
Код перед выполнением
определенных ветвей может с помощью
программных средств требовать (то есть
запрашивать), чтобы вызывающий его код имел
те или иные разрешения. Если требование не
выполняется, то общеязыковая среда
выполнения CLR запускает исключение System: :
Security: : SecurityException. Требуя любое разрешение,
надо быть готовым перехватить это
исключение и работать в ситуации, когда
разрешение не предоставлено. Большинству
программистов не нужно требовать
разрешений, потому что библиотеки каркаса
.NET делают это от вашего имени за вас.
Впрочем, вы все равно должлы быть готовы
обеспечить обработку исключений.
Код может делать за прос также на
то, чтобы предоставленные ему разрешения
были ограничены или отменены. Это важно для
кода, который использует компоненты или Web-сценарии
от сторонних производителей. Поскольку у
такого кода может быть меньший уровень
доверия, чем у полностью написанного вами,
то, пока он выполняется, возможно, придется
ограничить имеющиеся у него права. После
завершения выполнения кода можно
восстановить разрешения на прежнем уровне.
Определение личности кода
равнозначно вопросу опознавания в
традиционной системы безопасности. А. вот
вопрос о разрешениях решается на основе
разрешений, предоставленных сборке ил и
отнятых у нее.
Многие из классов, поддерживающих
разрешения, находятся в пространстве имен
System: :Secunty: : ^Permissions (Система::Безопасность::Разрешения).
Кроме того, разрешения поддерживаются и
некоторыми классами из пространств имен
System: :Net (Система::Сеть) и Sys tem:: Data (Система-Данные).